gtkwindow: Split code that detects if we want CSD out
authorJasper St. Pierre <jstpierre@mecheye.net>
Wed, 21 Aug 2013 19:05:44 +0000 (15:05 -0400)
committerJasper St. Pierre <jstpierre@mecheye.net>
Thu, 22 Aug 2013 13:25:39 +0000 (09:25 -0400)
This will get a bit more complex when we enable CSD for custom headerbars

https://bugzilla.gnome.org/show_bug.cgi?id=706529

gtk/gtkwindow.c

index 71fc55b5a2647074308ba7936694bdd46252b16b..2e4ed1269f122a9e153a911061e90b6e8f89598e 100644 (file)
@@ -5241,43 +5241,42 @@ create_titlebar (GtkWindow *window)
   return titlebar;
 }
 
-static void
-create_decoration (GtkWidget *widget)
+static gboolean
+gdk_window_should_use_csd (GtkWindow *window)
 {
-  GtkWindow *window = GTK_WINDOW (widget);
   GtkWindowPrivate *priv = window->priv;
 
-  /* Client decorations already created */
-  if (priv->client_decorated)
-    return;
-
   if (!priv->decorated)
-    return;
+    return FALSE;
 
   if (priv->type == GTK_WINDOW_POPUP)
-    return;
+    return FALSE;
 
 #ifdef GDK_WINDOWING_WAYLAND
-  if (GDK_IS_WAYLAND_DISPLAY (gtk_widget_get_display (widget)))
-    priv->client_decorated = TRUE;
+  if (GDK_IS_WAYLAND_DISPLAY (gtk_widget_get_display (GTK_WIDGET (window))))
+    return TRUE;
 #endif
 
-  if (!priv->client_decorated &&
-      g_strcmp0 (g_getenv ("GTK_CSD"), "1") == 0)
+  return (g_strcmp0 (g_getenv ("GTK_CSD"), "1") == 0);
+}
+
+static void
+create_decoration (GtkWidget *widget)
+{
+  GtkWindow *window = GTK_WINDOW (widget);
+  GtkWindowPrivate *priv = window->priv;
+
+#ifdef GDK_WINDOWING_X11
+  if (GDK_IS_X11_DISPLAY (gtk_widget_get_display (widget)))
     {
       GdkVisual *visual;
 
       /* We need a visual with alpha */
       visual = gdk_screen_get_rgba_visual (gtk_widget_get_screen (widget));
       if (visual)
-        {
-          gtk_widget_set_visual (widget, visual);
-          priv->client_decorated = TRUE;
-        }
+        gtk_widget_set_visual (widget, visual);
     }
-
-  if (!priv->client_decorated)
-    return;
+#endif
 
   if (priv->title_box == NULL)
     {
@@ -5700,7 +5699,8 @@ gtk_window_realize (GtkWidget *widget)
   window = GTK_WINDOW (widget);
   priv = window->priv;
 
-  create_decoration (widget);
+  if (!priv->client_decorated && gdk_window_should_use_csd (window))
+    create_decoration (widget);
 
   gtk_widget_get_allocation (widget, &allocation);